1. Field
The present disclosure relates to computer processing systems.
2. State of the Art
A computer processor (and the program which it executes) needs places to put data for later reference. A computer processor design will typically have many such places, each with its own trade off of capacity, speed of access, and cost. Usually these are arranged in a hierarchal manner referred to as the memory system of the processor, with small, fast, costly places used for short lived and/or frequently used small data and large, slow and cheap places used for what doesn't fit in the small, fast, costly places. The memory system typically includes the following components arranged in order of decreasing speed of access:                register file or other form of fast operand storage;        one or more levels of cache memory (one or more levels of the cache memory can be integrated with the processor (on-chip cache) or separate from the processor (off-chip cache);        main memory (or physical memory), which is typically implemented by DRAM memory and/or NVRAM memory and/or ROM;        controller card memory; and        on-line mass storage (typically implemented by one or more hard disk drives).        
In many computer processors, the main memory of the memory system can take several hundred machine cycles to access. The cache memory, which is much smaller and more expensive but with faster access as compared to the main memory, is used to keep copies of data that resides in the main memory. If a reference finds the desired data in the cache (a cache hit) it can access it in a few cycles instead of several hundred when it doesn't (a cache miss). Because a program typically cannot do anything while waiting to access data in memory, using a cache and making sure that desired data is copied into the cache can provide significant improvements in performance.
The address space of the program can employ virtual memory, which provides for two different purposes in modern processors. One purpose, known as paging, permits the totality of the virtual memory address spaces used by all programs to exceed the capacity of the physical address space of the main memory attached to the processor. The other purpose, known as address extension, permits the totality of the virtual address spaces used by all programs to exceed the address space supported by the processor.
A pointer is a primitive, the value of which is intended to be used as a memory address. A pointer points to a datum in the memory system when the pointer's value is the datum's memory address. More generally, a pointer is a kind of reference, and it is said that a pointer references a datum stored somewhere in the memory system. To obtain that datum is to dereference the pointer.
Pointers are used in setting up data structures like lists, queues and trees, typically helping to manage how the data structure is implemented and controlled. Common examples of pointers are start pointers, end pointers, and stack pointers. These pointers can either be absolute (the actual physical address or a virtual address in virtual memory) or relative (an offset from an absolute start address or “base”).
Processing pointers can lead to complexities that can degrade performance, particular in modern computer processing systems that employ garbage collectors that automatically move data in the memory system. Furthermore, pointers can also be the source for wild-address bugs that can lead to unwanted faults and possibly system crashes.